import { http } from "@/utils/http";
import type {
  CampaignSelectResponse,
  UnitSelectResponse,
  CampaignListResponse,
  AdAccountResponse,
  UnitListResponse
} from "./types";

/** 获取广告账号列表 */
export const getAdAccounts = (params?: { accountId?: number }) => {
  return http.request<AdAccountResponse["data"]>(
    "get",
    "/api/v1/account/adAccount",
    {
      params
    }
  );
};

/** 获取广告计划选项列表 */
export const getCampaignSelect = () => {
  return http.request<UnitSelectResponse["data"]>(
    "get",
    "/api/v1/campaign/select"
  );
};

/** 获取广告计划列表 */
export const getCampaignList = (params: {
  adAccountId: number;
  page: number;
  size: number;
  timeZoneIana: string;
  dataBeginTime: number;
  dataEndTime: number;
}) => {
  return http.request<CampaignListResponse["data"]>(
    "get",
    "/api/v1/campaign/list",
    {
      params
    }
  );
};

/** 创建广告计划 */
export interface CreateCampaignParams {
  adAccountId?: number;
  data?: {
    campaignName: string; // 广告计划名称，必填，长度不超过100
    adCategory?: number; // 广告分类，必填：1-效果广告
    campaignType?: number; // 营销目标，必填：3-转化
    marketingType?: number; // 推广对象，必填：1-应用推广 2-网站推广
    deliveryStrategy?: number; // 出价策略，必填：2-目标成本 3-最低转化成本 4-目标成本上限
    cboAuthorized?: number; // 预算优化 CBO 开关：1-开启 0-关闭
    budgetType?: number; // 预算类型，必填 1-不限 2-每日固定预算 3-固定日期预算
    dayBudget?: number; // 每日固定预算(预期值*10^6)，budgetType=2时必填
    budgetSchedule?: number[]; // 固定日期预算，budgetType=3时必填
  };
}

export const createCampaign = (params: CreateCampaignParams) => {
  return http.request("post", "/api/v1/campaign/create", {
    data: params
  });
};
/** 更新广告计划 */
export const campaignUpdateStatus = (params: any) => {
  return http.request("post", "/api/v1/campaign/update/status", {
    data: params
  });
};
/** 删广告计划 */
export const campaignDelete = (params: any) => {
  return http.request("post", "/api/v1/campaign/delete", {
    data: params
  });
};

/** 获取广告组选项列表 */
export const getUnitSelect = () => {
  return http.request<UnitSelectResponse["data"]>("get", "/api/v1/unit/select");
};

/** 获取广告创意枚举选项 */
export const getCreativeSelect = () => {
  return http.request<CampaignSelectResponse["data"]>(
    "get",
    "/api/v1/creative/select"
  );
};

/** 创建广告组 */
export interface CreateUnitParams {
  adAccountId: number; // 广告账号ID（必填）
  campaignId: number; // 广告计划ID（必填）
  data: {
    linkType: number; // 链接类型（必填）：1-app 2-落地页
    adCategory: number; // 广告分类：1-效果广告
    appId?: string | number; // app应用id
    websiteUrl?: string; // 网站推广链接
    pixelId?: number; // Pixel ID
    placements?: number[]; // 投放版位：1-信息流，5-激励
    countryRegionInfoList: Array<{ code: number }>; // 目标人群-国家/地区
    populationIdList?: number[]; // 自定义人群-定向id集合
    excludePopulationIdList?: number[]; // 自定义人群-排除的定向id集合
    ageList?: number[]; // 年龄段：1-18-24, 2-25-36, 3-37-50, 4-50+
    gender: number; // 性别（必填）：1-男，2-女，3-不限
    languageList?: number[]; // 语言列表
    devicePriceInfoList?: number[]; // 设备价格列表
    osTypeAndVersionList?: number[]; // 操作系统列表
    deviceBrandCodeList?: number[]; // 设备品牌列表
    contentInterestCodeList?: number[]; // 内容兴趣列表
    budgetType: number; // 预算类型（必填）：1-不限，2-每日固定，3-固定日期
    dayBudget?: number; // 每日固定预算(×10^6)
    budgetSchedule?: number[]; // 固定日期预算(×10^6)
    startTime?: number; // 排期开始时间戳(毫秒)
    endTime?: number; // 排期结束时间戳(毫秒)
    timeSchedule?: number[][]; // 投放时间段
    ocpxActionType: number; // 转化目标（必填）：100-激活...130-广告观看价值ROAS
    bidType: number; // 计费方式：10-OCPM
    bid?: number; // 出价(×10^6)
    unitName: string; // 广告组名称（必填）
  };
}

export const createUnit = (params: CreateUnitParams) => {
  return http.request("post", "/api/v1/unit/create", {
    data: params
  });
};

/** 更新广告组状态 */
export interface UpdateUnitStatusParams {
  adAccountId?: number;
  unitIdList?: number[]; // 需要更新的广告组ID集合，1~100个
  openStatus?: number; // 投放开关状态：1-开 2-关
}

export const updateUnitStatus = (params: UpdateUnitStatusParams) => {
  return http.request("post", "/api/v1/unit/update/status", {
    data: params
  });
};

/** 删除广告组 */
export interface DeleteUnitParams {
  adAccountId?: number;
  unitIdList?: string[]; // 广告组ID列表，不超过100个
}

export const deleteUnit = (params: DeleteUnitParams) => {
  return http.request("post", "/api/v1/unit/delete", {
    data: params
  });
};

/** 创建广告创意 */
export interface CreateCreativeParams {
  adAccountId?: number;
  data?: {
    adCategory: number; // 广告分类：1-效果广告
    unitId: string; // 广告组id
    creativeType: number; // 创意类型
    materialType: number; // 主要素材类型
    photoId?: number; // 视频ID，当creativeType=1(视频)时必填
    subTitle?: string; // 广告语，长度不超过20个字符
    desc?: string; // 描述，必填，长度不超过45个字符
    callToAction: number; // 行动号召目标
    creativeName?: string; // 广告计划名称，必填，长度不超过100
    deepLink?: string; // 深度转换链接(Deep Link)
  };
}

export const createCreative = (params: CreateCreativeParams) => {
  return http.request("post", "/api/v1/creative/create", {
    data: params
  });
};

/** 更新广告创意状态 */
export interface UpdateCreativeStatusParams {
  adAccountId?: number;
  creativeIdList?: number[]; // 需要更新的广告创意ID集合，1~100个
  openStatus?: number; // 投放开关状态：1-开 2-关
}

export const updateCreativeStatus = (params: UpdateCreativeStatusParams) => {
  return http.request("post", "/api/v1/creative/update/status", {
    data: params
  });
};

/** 删除广告创意 */
export interface DeleteCreativeParams {
  adAccountId?: number;
  creativeIdList?: string[]; // 需要删除的创意ID集合，1~100个
}

export const deleteCreative = (params: DeleteCreativeParams) => {
  return http.request("post", "/api/v1/creative/delete", {
    data: params
  });
};

/** 获取广告创意列表 */
export interface GetCreativeListParams {
  adAccountId: number; // 广告账号ID
  page: number; // 页码
  size: number; // 每页数量
  timeZoneIana: string; // 时区
  dataBeginTime: number; // 起始时间（毫秒时间戳）
  dataEndTime: number; // 结束时间（毫秒时间戳）
}

export const getCreativeList = (params: GetCreativeListParams) => {
  let query = "";
  Object.keys(params).forEach(key => {
    if (params[key]) {
      if (key == "campaignIdList") {
        if (params[key].length) {
          params[key].forEach(obj => {
            console.log("obj------", obj);
            query += `&${key}=${obj.campaignId}`;
          });
        }
      } else if (key == "unitIdList") {
        if (params[key].length) {
          params[key].forEach(obj => {
            query += `&${key}=${obj.unitId}`;
          });
        }
      } else {
        query += `&${key}=${params[key]}`;
      }
    }
  });
  return http.request<CampaignListResponse["data"]>(
    "get",
    `/api/v1/creative/list${query ? "?" + query : ""}`
  );
};

/** 获取快手应用列表 */
export const getKwaiApplicationList = (params: {
  size: number;
  adAccountId: number;
}) => {
  return http.request<any>("get", "/api/v1/system/all/application", {
    params
  });
};

/** 获取快手像素列表 */
export const getKwaiPixelList = (params: {
  size: number;
  adAccountId: number;
}) => {
  return http.request<any>("get", "/api/v1/system/all/pixel", {
    params
  });
};

export interface GetMaterialVideoListParams {
  size: number;
  page: number; // 从 1 开始
  videoMode?: number; // 视频模式：1-竖版 2-横版
  name?: string; // 视频名称
  adAccountId: number; // 广告账号ID
  director?: number; // 导演
  editor?: number; // 剪辑师
}

export const getMaterialVideoList = (params: GetMaterialVideoListParams) => {
  return http.request<any>("post", "/api/v1/material/video/list", {
    data: params
  });
};

export interface GetKwaiAudienceListParams {
  size: number;
  page: number; // 从 1 开始
  adAccountId: number;
  dataList: number[];
}

export const getKwaiAudienceList = (params: GetKwaiAudienceListParams) => {
  return http.request<any>("get", "/api/v1/system/all/audience", {
    params
  });
};

/** 获取广告组列表 */
export interface GetUnitListParams {
  adAccountId: number; // 广告账号ID（必填）
  page: number; // 页码（必填）
  size: number; // 每页数量（必填）
  timeZoneIana: string; // 时区（必填）- UTC-5, UTC-4, UTC-3, UTC+0, UTC+1, UTC+2, UTC+3, UTC+5, UTC+6, UTC+7, UTC+8
  dataBeginTime: number; // 起始时间（毫秒时间戳）（必填）
  dataEndTime: number; // 结束时间（毫秒时间戳）（必填）
  unitName?: string; // 广告组名称（可选）
}

export const getUnitList = (params: GetUnitListParams) => {
  let query = "";
  Object.keys(params).forEach(key => {
    if (params[key]) {
      if (key == "campaignIdList") {
        if (params[key].length) {
          params[key].forEach(obj => {
            console.log("obj------", obj);
            query += `&${key}=${obj.campaignId}`;
          });
        }
      } else {
        query += `&${key}=${params[key]}`;
      }
    }
  });

  return http.request<UnitListResponse["data"]>(
    "get",
    `/api/v1/unit/list${query ? "?" + query : ""}`
  );
};

export const getUnitMapiList = (params: any) => {
  return http.request<any["data"]>("get", "/api/v1/unit/mapi/list", {
    params
  });
};

/** 获取广告计划列表_mapi */
export interface GetCampaignListMapiParams {
  adAccountId: number; // 广告账户ID (必填)
  campaignName?: string; // 计划名字 (可选)
}

export interface CampaignListItemMapi {
  adAccountId: number;
  campaignId: number;
  campaignName: string;
  adCategory: number;
  marketingType: number;
  campaignType: number;
  deliveryStrategy: number;
  budgetOptimization: number;
  openStatus: number;
  status: number;
  dayBudget: number;
  budgetSchedule: string[];
}

export interface GetCampaignListMapiResponse {
  code: number;
  msg: string;
  data: CampaignListItemMapi[];
}

export const getCampaignListMapi = (params: GetCampaignListMapiParams) => {
  return http.request<GetCampaignListMapiResponse["data"]>(
    "get",
    "/api/v1/campaign/mapi/list",
    {
      params
    }
  );
};
